﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using Negocio.Entidades;


namespace Negocio.AccesoDatos
{
    public class PremioDAO : AccesoADatos
    {
        SqlConnection con;
        public PremioDAO()
        { }

        private void abrirConexion() {
            con = new SqlConnection();
            try
            {
                con.ConnectionString = ConfigurationManager.ConnectionStrings["AVEIT"].ConnectionString;
                con.Open();
            }
            catch (SqlException ex)
            {
                throw new ApplicationException("Error al conectarse a la base de datos" + ex.Message);
            }
        }

        private void cerrarConexion()
        {
            if (con != null && con.State == ConnectionState.Open)
                con.Close();
        }

        public void grabarPremio(Premio p)
        {
            int? id = p.id_premio;
            SqlCommand cmd = new SqlCommand();
            SqlTransaction trans = null;
            abrirConexion();
            try
            {
                trans = con.BeginTransaction();
                cmd.Connection = con;
                cmd.Transaction = trans;

                cmd.CommandText = "INSERT INTO Premios (nombre, descripcion, fecha_compra, precio_compra, activo, id_proveedor) VALUES(@nombre, @descripcion, @fecha_compra, @precio_compra, @activo, @proveedor); SELECT @@identity;";
                cmd.Parameters.Add(new SqlParameter("@nombre", p.nombre));
                cmd.Parameters.Add(new SqlParameter("@descripcion", p.descripcion));
                cmd.Parameters.Add(new SqlParameter("@fecha_compra", p.fecha_compra));
                cmd.Parameters.Add(new SqlParameter("@precio_compra", p.precio));
                cmd.Parameters.Add(new SqlParameter("@activo", p.activo));
                cmd.Parameters.Add(new SqlParameter("@proveedor", p.proveedor));

                if (id != null)
                {
                    cmd.CommandText = "UPDATE Premios SET nombre = @nombre, descripcion = @descripcion, fecha_compra = @fecha_compra, precio_compra = @precio_compra, id_proveedor= @proveedor WHERE id_premio = @Id";
                    cmd.Parameters.Add(new SqlParameter("@Id", id));
                    cmd.ExecuteNonQuery();
                }
                else
                {
                    p.id_premio = int.Parse(cmd.ExecuteScalar().ToString());
                }               
                trans.Commit();
            }
            catch (SqlException ex)
            {
                if (trans != null)
                    trans.Rollback();
                throw new ApplicationException("Error al ejecutar la transaccion en la Base de Datos " + ex.Message.ToString());
            }
            finally
            {
                cerrarConexion();
            }
        }

        public SqlDataReader grilla()
        {
            try
            {
                String sql = "Select *  from Premios where activo=1";
                //String sql = "Select id_premio as 'Numero Premio', nombre as 'Nombre', descripcion as 'Descripcion', fecha_compra as 'Fecha De Compra', precio_compra as 'Precio De Compra', activo as 'Habilitado', id_proveedor  from Premios";
                SqlDataReader sql_premio = consultarSqlDReader(sql);
                return sql_premio;
            }
            catch (Exception ex)
            {
                ex.Message.ToString();
                throw;
            }
            
        }

        public SqlDataReader DDL(int id_premio)
        {
            try
            {
                String sql = "Select *  from Premios where id_premio=@Id";
                SqlParameter cmd= new SqlParameter("@Id", id_premio);
                SqlDataReader sql_premio = consultarSqlDReader(sql,cmd);
                return sql_premio;
            }
            catch (Exception ex)
            {
                ex.Message.ToString();
                throw;
            }
 
        }

        public void eliminar(int id)
        {
            SqlCommand cmd = new SqlCommand();
            SqlTransaction trans = null;
            abrirConexion();
            try
            {
                trans = con.BeginTransaction();
                cmd.Connection = con;
                cmd.Transaction = trans;
                cmd.CommandText = "UPDATE Premios SET activo='false' WHERE id_premio = @Id";
                cmd.Parameters.Add(new SqlParameter("@Id", id));
                cmd.ExecuteNonQuery();
                trans.Commit();
            }
            catch (Exception ex)
            {
                if (trans != null)
                    trans.Rollback();
                throw ex;
            }
            finally
            {
                cerrarConexion(); 
            }
 
        }

    }
}